from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import relationship, backref
from sqlalchemy import Column , Integer, String , ForeignKey
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine ('sqlite:///treta.db')
Base = declarative_base()
class Naturalidade(Base):
	__tablename__ = 'naturalidades'
	id = Column(Integer, primary_key = True)
	nome = Column(String)
	def __init__(self, nome):
		self.nome = nome
class Aluno(Base):
	__tablename__ = 'alunos'
	id = Column(Integer, primary_key = True)
	nome = Column(String)
	numero = Column(Integer)
	curso = Column(String)
	naturalidade_id = Column(Integer, ForeignKey('naturalidades.id'))
	nacao = relationship("Naturalidade", backref = backref ('alunos', order_by=id))
	def __init__(self , nome , numero , curso , naturalidade):
		self.nome = nome 
		self.numero = numero
		self.curso = curso
		self.naturalidade = naturalidade
		
Base.metadata.create_all(engine)



Session = sessionmaker(bind=engine)
session = Session()
portugal = Naturalidade('Portugal')
espanha =  Naturalidade('Espanha')
franca = Naturalidade('Franca')
session.add(portugal)
session.add(espanha)
session.add(franca)
session.commit


aluno1 = Aluno('Tiago Bond', '007' , 'Espeleologia', portugal)
aluno2 = Aluno('Barbara Bond' , '008' , 'Comunicacao', espanha)
aluno3 = Aluno('Manuel Bond' , '009' , 'Filosofia' , franca)
session.add(aluno1); session.add(aluno2);
session.add(aluno3)
session.commit()

print "Nomes"
for obj in session.query(Aluno):
	print obj.nome.upper()
print

for obj in session.query(Aluno).filter(Aluno.nome == 'Barbara Bond'):
		print "informacao sobre:"
		print "nome = " , obj.nome
		print "numero {0} e curso {1}".format(obj.numero,obj.curso.upper())	
